package tablemodels;

import java.util.ArrayList;

import gui.MainFrame;

import javax.swing.table.DefaultTableModel;

/**
 * 
 * @author dernasherbrezon
 *
 */
public class EstimationModel extends DefaultTableModel
{
	ArrayList<String> header = new ArrayList<String>();
	MainFrame parent;
	public int[][]data;
	
	public EstimationModel(MainFrame parent)
	{
		this.parent = parent;
		header.add("Код риска");
		header.add("Сущность риска");
		for(int i=0;i<parent.riskCriterions.size();i++)
		{
			header.add(String.valueOf(parent.riskCriterions.get(i).index));
		}
		data = new int[parent.risks.size()][parent.riskCriterions.size()];
	}
	
	@Override
	public Class<?> getColumnClass(int columnIndex)
	{
		if(columnIndex>1)
		{
			return Integer.class;
		}
		return super.getColumnClass(columnIndex);
	}
	
	@Override
	public Object getValueAt(int row, int column)
	{
		if(column==0)
		{
			return parent.risks.get(row).code;
		}
		if(column==1)
		{
			return parent.risks.get(row).name;
		}
		return data[row][column-2];
	}
	
	@Override
	public void setValueAt(Object arg0, int row, int col)
	{
		data[row][col-2] = (Integer)arg0;
	}
	
	@Override
	public boolean isCellEditable(int row, int column)
	{
		if(column<2)
		{
			return false;
		}
		return true;
	}
	
	@Override
	public int getColumnCount()
	{
		return header.size();
	}
	
	@Override
	public int getRowCount()
	{
		if(parent!=null)
		{
			return parent.risks.size();
		}
		return 0;
	}
	
	@Override
	public String getColumnName(int column)
	{
		return header.get(column);
	}
	
	public void checkCorrectValues() throws Exception
	{
		for(int i=0;i<getColumnCount()-2;i++)
		{
			for(int j=0;j<getRowCount();j++)
			{
				checkForValue(i, j);
			}
		}
	}
	
	private void checkForValue(int column,int value) throws Exception
	{
		int numRepeats = 0;
		for(int i=0;i<getRowCount();i++)
		{
			if(data[i][column]==value)
			{
				numRepeats++;
			}
		}
		if(numRepeats==0)
		{
			throw new Exception("Значение \"" + value + "\" не присутствует в таблице");
		}
		if(numRepeats>1)
		{
			throw new Exception("Значение \"" + value + "\" указано больше одного раза");
		}
	}
}
